{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# XGBoost Parameter Tuning for Rent Listing Inqueries"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第五步：调整正则化参数：reg_alpha 和reg_lambda"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先 import 必要的模块"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "import math\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# path to where the data lies\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "test = pd.read_csv(dpath +\"RentListingInquries_FE_test.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "Y = train['interest_level']\n",
    "X = train.drop([\"interest_level\"], axis=1)\n",
    "X = np.array(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true,
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "X_train=X\n",
    "y_train=Y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RangeIndex(start=0, stop=74659, step=1)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.index"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "各类样本不均衡，交叉验证是采用StratifiedKFold，在每折采样时各类样本按比例采样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第二轮参数调整得到的n_estimators最优值（231），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "用交叉验证评价模型性能时，用scoring参数定义评价指标。评价指标是越高越好，因此用一些损失函数当评价指标时，需要再加负号，如neg_log_loss，neg_mean_squared_error 详见sklearn文档：http://scikit-learn.org/stable/modules/model_evaluation.html#log-loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [0.1, 1, 1.5, 2], 'reg_lambda': [0.1, 0.5, 1, 2]}"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#reg_alpha = [1e-3, 1e-2, 0.05, 0.1]    #default = 0\n",
    "#reg_lambda = [1e-3, 1e-2, 0.05, 0.1]   #default = 1\n",
    "\n",
    "reg_alpha = [ 0.1,1,1.5, 2]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [0.1,0.5, 1, 2]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58191, std: 0.00280, params: {'reg_alpha': 0.1, 'reg_lambda': 0.1},\n",
       "  mean: -0.58170, std: 0.00242, params: {'reg_alpha': 0.1, 'reg_lambda': 0.5},\n",
       "  mean: -0.58248, std: 0.00319, params: {'reg_alpha': 0.1, 'reg_lambda': 1},\n",
       "  mean: -0.58211, std: 0.00357, params: {'reg_alpha': 0.1, 'reg_lambda': 2},\n",
       "  mean: -0.58200, std: 0.00258, params: {'reg_alpha': 1, 'reg_lambda': 0.1},\n",
       "  mean: -0.58248, std: 0.00253, params: {'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       "  mean: -0.58216, std: 0.00271, params: {'reg_alpha': 1, 'reg_lambda': 1},\n",
       "  mean: -0.58218, std: 0.00270, params: {'reg_alpha': 1, 'reg_lambda': 2},\n",
       "  mean: -0.58199, std: 0.00271, params: {'reg_alpha': 1.5, 'reg_lambda': 0.1},\n",
       "  mean: -0.58246, std: 0.00294, params: {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.58226, std: 0.00274, params: {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  mean: -0.58245, std: 0.00281, params: {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  mean: -0.58182, std: 0.00281, params: {'reg_alpha': 2, 'reg_lambda': 0.1},\n",
       "  mean: -0.58229, std: 0.00312, params: {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  mean: -0.58202, std: 0.00315, params: {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  mean: -0.58224, std: 0.00269, params: {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " {'reg_alpha': 0.1, 'reg_lambda': 0.5},\n",
       " -0.5816986129388714)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=231,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=7,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch = GridSearchCV(xgb, param_grid = param_test, scoring='neg_log_loss',n_jobs=-1,cv=kfold)\n",
    "gsearch.fit(X_train , y_train)\n",
    "\n",
    "gsearch.grid_scores_, gsearch.best_params_,     gsearch.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([713.21799569, 712.63105869, 724.07543535, 712.9641994 ,\n",
       "        745.94316812, 724.36711216, 799.23339968, 752.36486874,\n",
       "        758.07573066, 715.13089142, 707.22645922, 692.20661044,\n",
       "        719.28764806, 695.6249959 , 695.22657075, 659.3462852 ]),\n",
       " 'mean_score_time': array([1.67966819, 1.70693941, 1.80008707, 1.66363235, 1.90496778,\n",
       "        1.9432682 , 1.87157707, 1.88571444, 1.7811377 , 1.74153118,\n",
       "        1.70252905, 1.66733689, 1.75236259, 1.67786369, 1.66893973,\n",
       "        1.37296162]),\n",
       " 'mean_test_score': array([-0.58190761, -0.58169861, -0.58248046, -0.5821079 , -0.58199914,\n",
       "        -0.5824808 , -0.58216425, -0.58217825, -0.58198617, -0.5824611 ,\n",
       "        -0.58225655, -0.58244979, -0.58182343, -0.58229297, -0.58201833,\n",
       "        -0.58224401]),\n",
       " 'mean_train_score': array([-0.47094293, -0.4718298 , -0.47330742, -0.47524097, -0.46880937,\n",
       "        -0.46992065, -0.47140778, -0.47422155, -0.46968332, -0.47073766,\n",
       "        -0.47236023, -0.47487827, -0.47140149, -0.47270282, -0.47385082,\n",
       "        -0.47617112]),\n",
       " 'param_reg_alpha': masked_array(data=[0.1, 0.1, 0.1, 0.1, 1, 1, 1, 1, 1.5, 1.5, 1.5, 1.5, 2,\n",
       "                    2, 2, 2],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_reg_lambda': masked_array(data=[0.1, 0.5, 1, 2, 0.1, 0.5, 1, 2, 0.1, 0.5, 1, 2, 0.1,\n",
       "                    0.5, 1, 2],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'reg_alpha': 0.1, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " 'rank_test_score': array([ 3,  1, 15,  7,  5, 16,  8,  9,  4, 14, 11, 13,  2, 12,  6, 10]),\n",
       " 'split0_test_score': array([-0.57819562, -0.57868368, -0.57786414, -0.57753764, -0.5781869 ,\n",
       "        -0.57881373, -0.57847826, -0.57877953, -0.57800228, -0.578053  ,\n",
       "        -0.57814694, -0.5787212 , -0.57837747, -0.57752372, -0.57747948,\n",
       "        -0.57834537]),\n",
       " 'split0_train_score': array([-0.47289328, -0.47418638, -0.47580037, -0.4770333 , -0.47012291,\n",
       "        -0.47265506, -0.47369916, -0.47640852, -0.47108393, -0.47287291,\n",
       "        -0.4739974 , -0.47662692, -0.47239554, -0.47368854, -0.47492869,\n",
       "        -0.47708298]),\n",
       " 'split1_test_score': array([-0.5815596 , -0.58049342, -0.58183146, -0.58048792, -0.58115832,\n",
       "        -0.58206736, -0.58088502, -0.58065939, -0.5811965 , -0.581424  ,\n",
       "        -0.58210629, -0.58046677, -0.58041785, -0.58115066, -0.58062007,\n",
       "        -0.58093821]),\n",
       " 'split1_train_score': array([-0.46904842, -0.47021986, -0.47345185, -0.47373075, -0.46801711,\n",
       "        -0.46935191, -0.47026267, -0.47339194, -0.46861447, -0.47044178,\n",
       "        -0.47106996, -0.47411809, -0.47096663, -0.47177879, -0.47333763,\n",
       "        -0.47468153]),\n",
       " 'split2_test_score': array([-0.57972827, -0.58047349, -0.58103699, -0.57999195, -0.58088819,\n",
       "        -0.58114407, -0.58102337, -0.58117704, -0.58084514, -0.5815098 ,\n",
       "        -0.58082105, -0.58238886, -0.58048244, -0.58148933, -0.58130749,\n",
       "        -0.58148654]),\n",
       " 'split2_train_score': array([-0.47169403, -0.47129488, -0.47324695, -0.47611513, -0.46900767,\n",
       "        -0.46965867, -0.47130001, -0.47468754, -0.47083582, -0.47137347,\n",
       "        -0.4728946 , -0.47518052, -0.4715972 , -0.47377995, -0.47527334,\n",
       "        -0.47687366]),\n",
       " 'split3_test_score': array([-0.58425017, -0.58333967, -0.58432443, -0.58549717, -0.58453075,\n",
       "        -0.58421045, -0.58433509, -0.58371636, -0.58413144, -0.58483379,\n",
       "        -0.5840527 , -0.58376368, -0.58340166, -0.58483426, -0.58387871,\n",
       "        -0.58452113]),\n",
       " 'split3_train_score': array([-0.47175245, -0.47295032, -0.47264455, -0.47526097, -0.4687863 ,\n",
       "        -0.4696937 , -0.47175121, -0.4747968 , -0.47036921, -0.471243  ,\n",
       "        -0.47338864, -0.47586885, -0.47293998, -0.47260981, -0.47454307,\n",
       "        -0.47758287]),\n",
       " 'split4_test_score': array([-0.58580557, -0.58550396, -0.58734677, -0.58702631, -0.5852325 ,\n",
       "        -0.5861695 , -0.58610072, -0.58656027, -0.58575666, -0.58648615,\n",
       "        -0.58615697, -0.5869098 , -0.58643915, -0.58646812, -0.58680734,\n",
       "        -0.58592992]),\n",
       " 'split4_train_score': array([-0.46932647, -0.47049753, -0.47139337, -0.47406472, -0.46811289,\n",
       "        -0.46824392, -0.47002585, -0.47182295, -0.46751315, -0.46775716,\n",
       "        -0.47045055, -0.47259699, -0.46910808, -0.47165701, -0.47117136,\n",
       "        -0.47463455]),\n",
       " 'std_fit_time': array([23.70869063, 27.90103068, 29.21395986, 15.43778666, 12.7500396 ,\n",
       "         2.32407744, 55.71619863, 43.91786956, 10.90746282, 31.49635531,\n",
       "        20.59860113, 17.30080125, 20.82834329, 22.56290389, 23.25981363,\n",
       "         9.07371446]),\n",
       " 'std_score_time': array([0.03564146, 0.11777434, 0.14763726, 0.09827999, 0.11084615,\n",
       "        0.15664528, 0.25147579, 0.18151023, 0.06631747, 0.0826478 ,\n",
       "        0.07405751, 0.05447084, 0.07772317, 0.07140822, 0.07462596,\n",
       "        0.0769615 ]),\n",
       " 'std_test_score': array([0.0028046 , 0.0024172 , 0.00319037, 0.00356829, 0.00258213,\n",
       "        0.00252987, 0.00271037, 0.00269907, 0.00270605, 0.00294076,\n",
       "        0.0027353 , 0.00280901, 0.00280856, 0.00311718, 0.00314494,\n",
       "        0.00269249]),\n",
       " 'std_train_score': array([0.00149836, 0.00151407, 0.00143821, 0.00123623, 0.00075868,\n",
       "        0.00146506, 0.00131156, 0.00153443, 0.00138654, 0.00168463,\n",
       "        0.0013664 , 0.00140801, 0.00132983, 0.00090422, 0.00149047,\n",
       "        0.00125682])}"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.581699 using {'reg_alpha': 0.1, 'reg_lambda': 0.5}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2824d42d128>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch.best_score_, gsearch.best_params_))\n",
    "test_means = gsearch.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "#log_reg_alpha = [0,0,0,0]\n",
    "#for index in range(len(reg_alpha)):\n",
    "#   log_reg_alpha[index] = math.log10(reg_alpha[index])\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
